package org.sundatagroup.aurora.core.config;

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;

/**
 * <p>抽象的注册者
 * <p>它会在系统启动完成后执行. <code>doRegister()</code> 方法只调用一次
 * </p>
 * 
 * @author Zdream
 * @date 2018-05-30
 * @since 0.2.0
 */
public abstract class AbstractRegister implements ApplicationListener<ApplicationReadyEvent> {
	
	private boolean PASS = false;

	/**
	 * 只调用一次的方法, 里面完成相关注册流程
	 */
	public abstract void doRegister();
	
	@Override
	public void onApplicationEvent(ApplicationReadyEvent event) {
		synchronized (this) {
			if (!PASS) {
				PASS = true;
			} else {
				return;
			}
		}
		// 上面一块的作用是，保证下面的方法只会执行一次
		
		doRegister();
	}

}
